package cn.bugstack.ai.model;

import lombok.*;
import java.util.Map;

/**
 * AI 响应模型
 * 
 * @author bugstack
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AIResponse {
    /**
     * 响应类型：message（消息）, trace（溯源信息）, error（错误）, complete（完成）, system（系统消息）
     */
    private String type;
    
    /**
     * 响应内容
     */
    private String content;
    
    /**
     * 会话ID
     */
    private String sessionId;
    
    /**
     * 溯源ID
     */
    private String traceId;
    
    /**
     * 是否已完成
     */
    private Boolean finished;
    
    /**
     * 错误信息
     */
    private String error;
    
    /**
     * 元数据（如token数量、溯源记录等）
     */
    private Map<String, Object> metadata;
    
    /**
     * 响应时间戳
     */
    private Long timestamp;
    
    /**
     * 创建消息响应
     */
    public static AIResponse message(String sessionId, String content) {
        return AIResponse.builder()
                .type("message")
                .sessionId(sessionId)
                .content(content)
                .finished(false)
                .timestamp(System.currentTimeMillis())
                .build();
    }
    
    /**
     * 创建系统响应
     */
    public static AIResponse system(String sessionId, String content) {
        return AIResponse.builder()
                .type("system")
                .sessionId(sessionId)
                .content(content)
                .timestamp(System.currentTimeMillis())
                .build();
    }
    
    /**
     * 创建错误响应
     */
    public static AIResponse error(String sessionId, String error) {
        return AIResponse.builder()
                .type("error")
                .sessionId(sessionId)
                .error(error)
                .timestamp(System.currentTimeMillis())
                .build();
    }
    
    /**
     * 创建完成响应
     */
    public static AIResponse complete(String sessionId, String traceId) {
        return AIResponse.builder()
                .type("complete")
                .sessionId(sessionId)
                .traceId(traceId)
                .finished(true)
                .timestamp(System.currentTimeMillis())
                .build();
    }
}
